package service

import (
	"context"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
)

const (
	ErrorCode     = 1001
	ErrorMsg      = "操作失败"
	SuccessCode   = 1000
	SuccessMsg    = "操作成功"
	NeedLoginCode = 5008
	NeedLoginMsg  = "请先登录"
)

type sResponse struct{}

var insResponse *sResponse

func Response() *sResponse {
	if insResponse == nil {
		insResponse = &sResponse{}
	}
	return insResponse
}

// Result 响应函数
func (s *sResponse) Result(ctx context.Context, code int, message string, data interface{}) {
	g.RequestFromCtx(ctx).Response.WriteJsonExit(ghttp.DefaultHandlerResponse{
		Code:    code,
		Message: message,
		Data:    data,
	})
}

// Error 错误响应
func (s *sResponse) Error(ctx context.Context) {
	s.Result(ctx, ErrorCode, ErrorMsg, nil)
}

// ErrorWithCode 错误响应，可自定义错误码
func (s *sResponse) ErrorWithCode(ctx context.Context, code int) {
	s.Result(ctx, code, ErrorMsg, nil)
}

// ErrorWithMessage 错误响应，可自定义提示消息
func (s *sResponse) ErrorWithMessage(ctx context.Context, message string) {
	s.Result(ctx, ErrorCode, message, nil)
}

// Success 成功响应
func (s *sResponse) Success(ctx context.Context) {
	s.Result(ctx, SuccessCode, SuccessMsg, nil)
}

// SuccessWithMessage 成功响应，可自定义提示消息
func (s *sResponse) SuccessWithMessage(ctx context.Context, message string) {
	s.Result(ctx, SuccessCode, message, nil)
}

// SuccessWithData 成功响应，可自定义返回数据
func (s *sResponse) SuccessWithData(ctx context.Context, data interface{}) {
	s.Result(ctx, SuccessCode, SuccessMsg, data)
}
